package com.wyr.leetcode.step1.linkedList;

public class RemoveElements {
    /**
     * 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
     * <p>
     * https://leetcode.cn/problems/remove-linked-list-elements/description/
     */

    public ListNode removeElements(ListNode head, int val) {
        if (head == null) {
            return null;
        }
        // 先确定头节点，即第一个不等于val的节点
        ListNode newHead = head;
        while (newHead != null && newHead.val == val) {
            newHead = newHead.next;
        }
        if (newHead != null && newHead.next != null) {
            ListNode tmp = newHead.next;
            ListNode tmpBefore = newHead;
            while (tmp != null) {
                if (tmp.val == val) {
                    tmpBefore.next = tmp.next;
                } else {
                    tmpBefore = tmp;
                }
                tmp = tmp.next;
            }
        }
        return newHead;
    }
}

class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }
}
